# @Time : 2024/7/22 20:33
# @Author : Adam
# @Version : v1.0
# @IDE : PyCharm
# @Project : tracer
import datetime
from django.utils.deprecation import MiddlewareMixin
from web import models
from django.shortcuts import redirect, reverse
from django.conf import settings


class Tracer(object):
    def __init__(self):
        self.user = None
        self.price_policy = None
        self.project = None


class AuthMiddleware(MiddlewareMixin):
    def process_request(self, request):
        """如果用户已登录，则request中赋值"""
        request.tracer = Tracer()

        user_id = request.session.get('user_id', 0)
        user_object = models.UserInfo.objects.filter(id=user_id).first()
        # print(user_object)
        # tracer_object.user = user_object
        request.tracer.user = user_object

        # 白名单：没有登录都可以访问的
        """
        1.获取当前用户访问的URL
        2.检查URL是否在白名单中，如果在，则可以继续向后访问，如果不在则进行判断是否已登录
        """
        if request.path_info in settings.WHITE_REGEX_URL_LIST:
            return

        # 检查用户是否已登录，已登录继续往后走；未登录则返回登录页面
        if not request.tracer.user:
            return redirect(reverse('login'))

        # 登录成功后，访问后台管理时，获取当前用户所拥有的额度
        # 方式一：免费额度在交易记录中存储

        # 获取当前用户ID值最大（最近交易记录）
        _object = models.Transaction.objects.filter(user=user_object, status=2).order_by('-id').first()

        # 判断是否已过期
        current_datetime = datetime.datetime.now()
        if _object.end_datetime and _object.end_datetime < current_datetime:
            _object = models.Transaction.objects.filter(user=user_object, status=2, price_policy__category=1).first()
        request.tracer.price_policy = _object.price_policy
        """
        # 方式二：免费额度存储配置文件
        _object = models.Transaction.objects.filter(user=user_object, status=2).order_by(-'id').first()
        if not _object:
            #没有购买
            request.price_policy=models.PricePolicy.objects.filter(category=1,title='个人免费版').first()
        else:
            #付费版
            current_datetime = datetime.datetime.now()
            if _object.end_datetime and _object.end_datetime < current_datetime:
                request.price_policy = models.PricePolicy.objects.filter(category=1, title='个人免费版').first()
            else:
                request.price_policy=_object.price_policy
        """

    def process_view(self, request, view, args, kwargs):
        # 判断URL是否以manage开头，如果是则判断项目id是否是我的或者我参于的
        if not request.path_info.startswith('/manage/'):
            return
        # project_id是我创建 or 我参与的
        project_id = kwargs.get('project_id')
        request.tracer.user
        # 是否是我创建的
        project_object = models.Project.objects.filter(creator=request.tracer.user, id=project_id).first()
        if project_object:
            request.tracer.project = project_object
            # 是我创建的项目的话，就让它通过
            return
        # 是否我参与的项目
        project_user_object = models.ProjectUser.objects.filter(user=request.tracer.user, project_id=project_id).first()
        if project_user_object:
            # 是我参与的项目
            request.tracer.project = project_user_object.project
            return
        return redirect(reverse('project_list'))
